Skip to content

Decouple SparkSubmitOperator resumable deployment backends for better…#68679

Open
onlyarnav wants to merge 6 commits into
apache:mainfrom
onlyarnav:refactor-spark-submit-resumable-backends
Open

Decouple SparkSubmitOperator resumable deployment backends for better…#68679
onlyarnav wants to merge 6 commits into
apache:mainfrom
onlyarnav:refactor-spark-submit-resumable-backends

Conversation

@onlyarnav

Copy link
Copy Markdown
Contributor

Description

The ResumableJobMixin implementation for SparkSubmitOperator previously had YARN, Kubernetes, and Standalone backend logics interleaved directly inside each mixin method. This scattered per-backend logic across multiple methods. Decoupling these by introducing specialized strategy classes per backend isolates the deployment-specific details, making the operator easier to maintain and extend.

This refactor:

  • Defines private strategy classes (_SparkSubmitDeploymentBackend, _KubernetesSparkSubmitBackend, _YarnSparkSubmitBackend, _StandaloneSparkSubmitBackend) to cleanly isolate the status and execution tracking logic of each deployment mode.
  • Resolves and caches the active deployment strategy exactly once using a private _backend cached property on SparkSubmitOperator.
  • Delegates all mixin methods (submit_job, get_job_status, is_job_active, is_job_succeeded, poll_until_complete, on_kill) directly to the active backend strategy.

This improves maintainability while keeping public namespaces completely clean.

fixes #68505

Was generative AI tooling used to co-author this PR?
  • Yes (claude code)

… maintainability

The ResumableJobMixin implementation for SparkSubmitOperator previously had YARN, Kubernetes, and Standalone backend logics interleaved directly inside each mixin method. This scattered per-backend logic across multiple methods. Decoupling these by introducing specialized strategy classes per backend isolates the deployment-specific details, making the operator easier to maintain and extend.
@onlyarnav

Copy link
Copy Markdown
Contributor Author

@SameerMesiah97 could you review the new PR please.

@SameerMesiah97

Copy link
Copy Markdown
Contributor

@SameerMesiah97 could you review the new PR please.

Okay. But for future reference, it is better to revise the existing PR as previous feedback is easier to trace.

@SameerMesiah97 SameerMesiah97 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The use of private classes fixed my main concern. And looking at your comment in the closed PR #68543, it seems like it is plausible that additional backends may be added in the near future so the class-based approach is defensible.

This is basically a lift and shift of much of the existing operator logic and into these classes. So I checked if any bugs were introduced by accident and could not find any. There is a CI failure so I would fix that. No further reservations.

…eclaration

self.__backend: _SparkSubmitDeploymentBackend | None = None in __init__ gives mypy the type — fixes error 1.

backend: _SparkSubmitDeploymentBackend before the if/elif/else — fixes errors 2 and 3.

hasattr check replaced with is not None — fixes the name mangling bug.
Removed unnecessary blank lines in the SparkSubmitOperator and backend classes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor SparkSubmitOperator resumable backends into separate methods/classes

2 participants